//
//  ViewController.m
//  tableView2
//
//  Created by 楼楚 on 15/11/10.
//  Copyright © 2015年 Chu Lou. All rights reserved.
//

#import "ViewController.h"
#import "heros.h"

@interface ViewController () <UITableViewDataSource,UITableViewDelegate>
@property(strong,nonatomic)UITableView *tableView;
@property (strong,nonatomic) NSArray *heros;
@end

@implementation ViewController

- (NSArray *)heros
{
    if (_heros == nil) {
        _heros = [heros heros];
        
    }
    return _heros;
}

/**
 UITableViewStylePlain,     // 平板的格式
 UITableViewStyleGrouped    // 分组的格式
 */
- (UITableView *)tableView
{ // 表格控件在创建时必须指定样式，只能使用以下实例化方法
    if (_tableView == nil) {
        _tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:(UITableViewStylePlain)];
        _tableView.dataSource = self;
        _tableView.delegate = self;
        
        [self.view addSubview:_tableView];
    }
    return _tableView;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [self tableView];
    
//    设置行高
    self.tableView.rowHeight =120;
//    分割线
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
    /**
     32位真彩色 ARGB 2^8 * 2^8 * 2^8 * 2^8 = 2^32 = 2^2 * 2^10 * 2^10 * 2^10  = 4G
     2^64 = 16 GG
     
     A = Alpha
     R = Red
     G = Green
     B = Blun
     24位真彩色 RGB 2^8 * 2^8 * 2^8 = 2 ^ 24 = 2^4 * 2^10 = 16 * 100万
     R = Red     1个字节  8位 0~255
     G = Green
     B = Blun
     
     # ff ff ff ff
     */

    
    self.tableView.separatorColor = [UIColor colorWithRed:0.1 / 255.0 green:240.0 / 255.0 blue:3 / 255.0 alpha:0.2];
//    headview 放在tableview最顶部的视图，通常用来放图片轮播器
    UIView *head = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 130)];
    head.backgroundColor = [UIColor colorWithRed:20 / 255.0 green:20 / 255.0 blue:50 / 255.0 alpha:0.8];
    self.tableView.tableHeaderView = head;
    // footerView，通常做上拉刷新
    UIView *foot = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];
    foot.backgroundColor = [UIColor colorWithRed:50 / 255.0 green:20 / 255.0 blue:30 /255.0 alpha:0.5];
    self.tableView.tableFooterView = foot;
}

#pragma mark - 数据源方法


//每个分组中得数据总数

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.heros.count;
}

/**
 UITableViewCellStyleDefault,   默认类型 标题+可选图像
 UITableViewCellStyleValue1,    标题+明细+图像
 UITableViewCellStyleValue2,    不显示图像，标题+明细
 UITableViewCellStyleSubtitle   标题+明细+图像
 */

//每个单元格的明细信息

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"表格行明细 %d",indexPath.row);
    
//0.可重用标示符字符串
//    static静态变量，能够保证系统为变量在内存中只分配一次内存空间
//    静态变量一旦被创建，就不会被释放，只有当应用程序被销毁时，才会释放
  static  NSString *ID = @"cell";
    //    1.去缓存池查找可重用的单元格
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//    2.如果没有找到
    if (cell == nil) {
        NSLog(@"实例化单元格");
//        实例化新的单元格
        cell =[[UITableViewCell alloc]initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:ID];
//        右侧箭头
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
////        backgroundcolor
//        cell.backgroundColor = [UIColor grayColor];
////        在实际开发中 使用背景视图的情况比较多
////        背景视图 不需要制定大小 cell会根据自身的尺寸 自动调整背景视图的显示
//        UIImage *image = [UIImage imageNamed:@"img_01"];
//        cell.backgroundView = [[UIImageView alloc]initWithImage:image];
////        选中的背景视图
//        UIImage *image2 = [UIImage imageNamed:@"img_02"];
//        cell.selectedBackgroundView= [[UIImageView alloc]initWithImage:image2];
        
    }
    
    
//    设置单元格内容
   
//    取出英雄对象
    
    heros *hero = self.heros[indexPath.row];
    
//    标题
    cell.textLabel.text = hero.name;
//    明细信息
    cell.detailTextLabel.text = hero.intro;
//    图像
    cell.imageView.image = [UIImage imageNamed:hero.icon];
    
    

   
    
    return cell;
}

- (void)switchChanged:(UISwitch *)sender
{
    NSLog(@"%s %@",__func__,sender);
}
# pragma mark - 表格代理方法
// accessoryType为按钮时，点击右侧按钮的监听方法
// 此方法不会触发行选中，跟行选中各自独立
// 只是为accessoryType服务，对自定义控件不响应
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
     NSLog(@"%s %@",__func__,indexPath);
}

//取消选中某一行
// didDeselectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"%s %@",__func__,indexPath);
}
//选中了某一行，有箭头的
// didSelectRowAtIndexPath
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"%s %@",__func__,indexPath);
}

/*
 代理方法的优先级比rowHeight优先级高
 
 应用场景：很多应用程序，每一行的高度是不一样的，例如：新浪微博
 
 表格工作观察的小结
 
 1> 要知道总共有多少数据
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 
 2> 计算“每一行”的行高
 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 
 问题：在此方法执行时，cell被实例化了吗？
 方法的作用是什么？
 
 scrollView需要指定contentSize才能够滚动，如果没有实现方法，行高默认是44
 
 需要知道每一行的高度，才能够准确的计算出contentSize
 
 知道每一行的高度后，自然知道每一个屏幕应该显示多少行，表格明细方法的执行次数就知道了
 
 3> 表格明细
 调用屏幕显示所需要的行数，懒加载，只有要显示的表格行，才会被实例化！
 
 小的结论：
 
 *  tableView.rowHeight：    效率高，适用于所有的表格行高度一致
 *  代理方法指定行高：          效率差，适合于每一个行的行高不一样，能够让表格更加的灵活
 
 */

//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
//{
//    return 60;
//}

@end
